package demo.forms;

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;

import org.openqa.selenium.By;
import webdriver.BaseForm;
import webdriver.Browser;
import webdriver.Browser.Browsers;
import webdriver.elements.Button;

/**
 * Класс для описания главной страницы steam, перехода по меню, <br>
 * некоторых общих для всех страниц шаблонов локаторов и методов
 *
 */
public class SteamBasePage extends BaseForm {

	// шаблоны локаторов
	protected static String aLinkTextLocator = "//a[contains(.,'%s')]";
	protected static String itemTextLocator = "//%1%s[contains(.,'%2%s')]";
	protected static String divIdContainsLocator = "//div[contains(@id,'%s')]";
	protected static String h2TextLocator = "//h2[contains(.,'%s')]";
	protected static String divIdWithTextContainsLocator = "//div[@id='%1$s' and contains(.,'%2$s')]";
	protected static String divOnclickWithTextContainsLocator = "//div[contains(@onclick,'%1$s') and contains(.,'%2$s')]";

	// элементы страницы
	private static Button btnGames = new Button(divIdWithTextContainsLocator, "genre_tab", "Игры", "Игры");

	/**
	 * Дефолтный конструктор
	 */
	public SteamBasePage() {
		super(By.xpath(String.format(aLinkTextLocator, "login")), "Главная страница Steam");
	}

	/**
	 * Конструктор для подстановки в xpathLocatorTemplate значения locatorValue, <br>
	 * например, для использования h2[contains(.,'%s')]
	 * @param xpathLocatorTemplate шаблон локатора
	 * @param locatorValue подстановочное значение.
	 * @param formTitle название страницы
	 */
	public SteamBasePage(String xpathLocatorTemplate, String locatorValue, String formTitle) {
		super(By.xpath(String.format(xpathLocatorTemplate, locatorValue)), formTitle);
	}

	/**
	 * Переходит по меню Игр в указанный тип игры
	 * @param gameType тип игры
	 * @return страницу со списком игр выбранного типа
	 */
	@SuppressWarnings("deprecation")
	public GamesListPage openGameMenuItem(String gameType){
		btnGames.click();
		browser.sleep(1000L);
		new Button(By.xpath("//div[@id='genre_flyout']//a[contains(.,'"+gameType+"')]"), gameType).click();
		return new GamesListPage();
	}

	/**
	 * Скачивает установщик стима
	 */
	public static void downloadSteam(){
		new Button(aLinkTextLocator, "Установить Steam", "Установить Steam").click();
		new Button(By.xpath("//a[contains(@href,'Setup.exe')]"), "Steam installer").click();

		if (Browser.currentBrowser.equals(Browsers.FIREFOX)){
			handleDialog(true);
		}		
	}
	
	/**
	 * Нажимает Yes в окне диалога скачки файла
	 */
	public static void handleDialog(Boolean clickLeft){
		Robot robot;
		try {
			Thread.sleep(3000);
			robot = new Robot();
			if (clickLeft){
			robot.keyPress(KeyEvent.VK_LEFT);    
			robot.keyRelease(KeyEvent.VK_LEFT);
			}
			robot.keyPress(KeyEvent.VK_ENTER);    
			 robot.keyRelease(KeyEvent.VK_ENTER);    
		} catch (AWTException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}   
	}
}
